/*
 * This file or a portion of this file is licensed under the terms of
 * the Globus Toolkit Public License, found in file GTPL, or at
 * http://www.globus.org/toolkit/download/license.html. This notice must
 * appear in redistributions of this file, with or without modification.
 *
 * Redistributions of this Software, with or without modification, must
 * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
 * some other similar material which is provided with the Software (if
 * any).
 *
 * Copyright 1999-2004 University of Chicago and The University of
 * Southern California. All rights reserved.
 */
package org.griphyn.vdl.directive;
import edu.isi.pegasus.common.util.Currently;
import org.griphyn.vdl.parser.*;
import org.griphyn.vdl.classes.*;
import org.griphyn.vdl.util.Logging;

import java.io.Reader;
import java.io.Writer;
import java.io.IOException;
import java.util.MissingResourceException;

/**
 * The class converts VDLt syntax into VDLx syntax.
 *
 * @author Jens-S. Vöckler
 * @author Yong Zhao
 * @version $Revision: 2079 $
 *
 * @see org.griphyn.vdl.parser.VDLtParser
 */
public class VDLtConvert extends Directive
{
  /**
   * Constructor
   */
  public VDLtConvert()
    throws IOException, MissingResourceException
  {
    super();
  }

  /**
   * Reads VDLt specification and outputs VDLx specification
   *
   * @param reader   the vdlt source reader
   * @param writer   the vdlx taget writer
   */
  public void VDLt2VDLx( Reader reader, Writer writer )
      throws VDLtParserException, VDLtScannerException, IOException
  {
      VDLt2VDLx( reader, writer, null, null);
  }

  /**
   * Reads VDLt specification and outputs VDLx specification
   *
   * @param reader   the vdlt source reader
   * @param writer   the vdlx taget writer
   * @param namespace  the common vdl namespace for all the definitions included
   * @param version    the common version number for all the definitions included
   */
  public void VDLt2VDLx( Reader reader, Writer writer, String namespace, String version ) 
      throws VDLtParserException, VDLtScannerException, IOException
  {
      VDLtParser parser = new VDLtParser( reader );

      String newline = System.getProperty( "line.separator", "\r\n" );

      Definitions def = new Definitions();
      def.setVdlns( namespace );
      def.setVersion( version );
      def.writeXMLHeader( writer, "", null );

      do {
	  Definition d = parser.parseDefinition();
	  d.toXML( writer, "  " );
	  if ( m_verbose ) m_logger.log( "directive", 1, d.shortID() );
      } while ( parser.hasMoreTokens() );

      writer.write( "</definitions>" );
      writer.write( newline );
      writer.flush();
  }
}
